package com.zhangyang;

import java.nio.ByteBuffer;

/**
 * Created by ASUS on 2017/10/13.
 * 只读缓冲区 只是保持 只读 不能修改数据!
 */
public class ReadAbleBuffer {
    public static void main(String[] args) {
        ByteBuffer byteBuffer=ByteBuffer.allocate(10);
        for (int i = 0; i < byteBuffer.capacity(); ++i) {
            byteBuffer.put((byte)i);
        }

        //注意只读缓冲区 对应的初始化的位置 position 和limit  和byteBuffer 一致
        ByteBuffer readAbleBuffer=byteBuffer.asReadOnlyBuffer();

        //重新设置byteBuffer 中的position和limit
        byteBuffer.position(3);
        byteBuffer.limit(byteBuffer.capacity());

        //不能修改数据 只能读取数据 java.nio.ReadOnlyBufferException
//        readAbleBuffer.put((byte) 10);

        System.out.println("11111111 byteBuffer.position():"+byteBuffer.position()+"..byteBuffer.limit:"+byteBuffer.limit());
        //使用另外一种循环
       for(int i=byteBuffer.position();i<byteBuffer.limit();++i){
           byteBuffer.put((byte) (10*byteBuffer.get(i)));
       }

        byteBuffer.flip();
        System.out.println("22222222 byteBuffer.position():"+byteBuffer.position()+"..byteBuffer.limit:"+byteBuffer.limit());
        //往ByteBuffer中修改数据
//        for(int i=0;i<byteBuffer.capacity();++i){
//            byteBuffer.put((byte) (10*byteBuffer.get(i)));
//        }

        //重新设置 可读缓冲区中的位置 和 limit
        readAbleBuffer.flip();

        //手动设置对应的position 和 limit 位置!
//        readAbleBuffer.position(0);
//        readAbleBuffer.limit(byteBuffer.capacity());
//        System.out.println("readAbleBuffer.position():"+readAbleBuffer.position()+"..readAbleBuffer.limit:"+readAbleBuffer.limit());
        while (readAbleBuffer.hasRemaining()) {
            System.out.print(" "+readAbleBuffer.get());
        }
    }
}
